#ifndef DATABASE_H
#define DATABASE_H

#include <QObject>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include <QString>

class Database : public QObject
{
    Q_OBJECT

public:
    explicit Database(QObject *parent = nullptr);
    ~Database();

    bool connect();
    bool disconnect();
    bool isConnected() const;
    QSqlDatabase getDatabase() const { return db; }

    // 用户相关操作
    bool validateUser(const QString &username, const QString &password);
    bool changePassword(const QString &username, const QString &oldPassword, const QString &newPassword);
    bool addUser(const QString &username, const QString &password);

    // 图书相关操作
    bool addBook(const QString &id, const QString &title, const QString &author, 
                const QString &publisher, bool available);
    bool updateBook(const QString &id, const QString &title, const QString &author, 
                   const QString &publisher, bool available);
    bool deleteBook(const QString &id);
    bool borrowBook(const QString &bookId, const QString &userId);
    bool returnBook(const QString &bookId, const QString &userId);
    QSqlQuery getBookInfo(const QString &id);
    QSqlQuery searchBooks(const QString &keyword);

    // 借阅记录相关操作
    QSqlQuery getBorrowHistory(const QString &userId);
    QSqlQuery getCurrentBorrows(const QString &userId);

private:
    QSqlDatabase db;
    bool createTables();
};

#endif // DATABASE_H 